E-prime主要常见问题及matlab、python打marker方式
今天更新一期E-prime呈现刺激常见的问题,基本上做脑成像的设备,不论是做什么实验的基本上都会用到,E-prime是一个非常简单入手的软件,对于刚“入坑”做脑科学研究的人来说,这个软件不需要编程基础,简直是“傻瓜式”的操作。但是还是会有很多人对这个软件有很多的问题,这两天就被一些老师问到一些基本的操作问题,整得我有点烦躁。那就写点东西供大家参考用。当然,呈现刺激并不是一定需要使用这个软件,presentation、inquisit、opensesame、matlab、python、c、c++等软件都可以实现。但对于初学者来说,E-prime相比较上面的软件来说是最友好的了。
回归正题,下面是总结的E-prime主要常见问题以及matlab、python打marker的几种方式。
一、E-prime常见问题
1.1 E-prime版本打Mark无法正常发送原因
1.2 E-prime如何同时呈现多种刺激
1.3 E-prime 3.0版本安装注意事项
1.4 E-prime 如何设置刺激呈现时间随机
1.5 E-prime 如何修改文本刺激的背景色和字体颜色
1.6 E-prime 如何查看刺激电脑并口的端口地址
1.7 以前能够发送Mark,换了刺激电脑后,同样的刺激程序打不上Mark,无任何代码发送过来
1.8 E-prime 1.1编制的程序转化成2.0/3.0的文档
1.9 E-prime开端口语句
二、Matlab中使用psychotoolbox打标记方式
2.1第一种方式适用于window 7 32位系统(PortTalk文件)
2.2第二种方式,适用于window 7/10 32&64位系统(Inpout文件)常见方式
2.3第三种方式,适用于window7系统,但对matlab版本有要求
三、python中打标记方式
3.1第一种方法:调用库PyParallel
3.2第二种方法:使用Inpout32.dll文件
一、E-prime常见问题
1.1 E-prime版本打Mark无法正常发送原因
1、检查硬件连接线之间是否有松动
2、查看E-prime中inline语句是否书写正确;
3、修改需要打标记的刺激材料属性中的Duration-PreRelease选项默认的same as duration更改为0即可。
1.2 E-prime如何同时呈现多种刺激
可以通过Slide控件实现多种刺激(图片、文本、声音、视频)同时呈现。
1.3 E-prime 3.0版本安装注意事项
在安装E-prime3.0程序之前需要先安装dotnetfx4.5插件(在安装文件support中可离线安装)。
1.4 E-prime 如何设置刺激呈现时间随机
可以通过inline语句定义刺激的呈现时间随机。例:设置Textdisplay1的刺激呈现时间在800-1200ms之间随机呈现
eg: Textdisplay1.duration = random(800,1200)
1.5 E-prime 如何修改文本刺激的背景色和字体颜色
打开文本刺激属性窗口,在General选项修改Backcolor和Forecolor即可,如图中所示
1.6 E-prime 如何查看刺激电脑并口的端口地址
依次点击我的电脑或计算机(右击)—管理—设备管理器—端口—LPT端口—资源—I/O范围中的前四个数字。
1.7 以前能够发送Mark,换了刺激电脑后,同样的刺激程序打不上Mark,无任何代码发送过来
1、先排查硬件是否已连接好;
2、更换刺激电脑后,需重新书写刺激程序中的开端口地址;
3、重新查看新刺激电脑中的并口端口地址;
4、将刺激程序中的inline语句相应端口地址更改为新刺激电脑的并口端口地址。
1.8 E-prime 1.1编制的程序转化成2.0/3.0的文档
1、打开2.0/3.0的e-studio,把1.1的程序文件拖到e-studio的窗口中就会提示进行转换,转换后保存回原程序文件夹中再运行就可以了。
2、把1.1的程序文件的后缀名由es改成es2,点击运行后会提示进行转换,之后的步骤同(1)所述。
1.9 E-prime开端口语句
1、打开端口命令
inline1:
Textdisplay1.OnsetSignalEnabled = True %打开控件Textdisplay1的端口
Textdisplay1.OnsetSignalPort = &H378
%打开Textdisplay1端口为H378(电脑设备管理器中查看)
Textdisplay1.OffsetSignalEnabled = True %关闭控件Textdisplay1的端口
Textdisplay1.OffsetSignalPort =&H378
%关闭控件Textdisplay1的端口为H378
inline2:
Textdisplay1.OnsetSignalData =c.GetAttrib("Condition")
%向ERPs发送控件Textdisplay1的刺激信号(Mark),这个刺激信号从List中的condition(code)获取
inline3:
1、if Answer.resp=”1” or Answer.resp=”3” then
WritePort&H378,c.GetAttrib(“Answer.resp”) %“Answer”是刺激的名称
else WritePort &H378,2
end if %假如反应为“1”或“3”,则标记为“1”或“3”;不反应则标记为“2”
2、if Target.resp = "f" then
writePort &H378,1
elseif Target.resp = "j" then
writePort &H378,2
else writePort &H378,3
end if %当反应的按键是字母(如j、f)时:按f键读为1,按j键读为2,无需按键时读为3。”标在后面
inline4:
If Target.Acc = 1 Then
writeport &H378,1
ElseIf Len(Target.Acc) > 0 Then
writepote &H378,2
Else
writepote &H378,3
End If
2、if语句还可以写成if then
If Target.GetAttrib(“code”)=“5” and back.GetAttrib(“code2”)>0 and resp = "j" and Target.c.GetAttrib(“code”)=“5” then
writePort&H378,3
%如果Target获得的刺激类型5,同时反馈刺激为J 那么向端口输出,mark为3
二、Matlab中使用psychotoolbox打标记方式
有三种方式可供选择:
2.1第一种方式适用于window 7 32位系统(PortTalk文件)
要访问XP / Vista / 7下的并行端口,需要内核环0驱动程序。我们使用Craig Peacock的PortTalk,你可以从http://www.beyondlogic.org/porttalk/porttalk.htm下载。这只适用于32位window(64位见下面的64位解决方案)。
将porttalk.sys文件复制到您的windows\system32\drivers目录中。编辑porttalk.reg文件替换"Start"=dword:00000002的"Start"=dword:00000000。具有管理权限的用户双击编辑porttalk.reg将内容写入Windows注册表后并重新启动电脑。
附加C代码(也可以在访问复制lptwrite.c与其它文档lptwrite.m),PortTalk_IOCTL.h以及pt_ioctl.c(在IoExample从porttalk zip压缩包的子目录)到您的计算机上的目录。把你的MATLAB目录路径改成这个目录,并执行这个目录,mex-v lptwrite.c在你的目录中产生一个额外的文件(lptwrite.dll或者lptwrite.mexw32取决于你的MATLAB版本)。
在桌面右键点击我的电脑,选择管理,设备管理器,展开“端口(COM&LPT)”,右键点击名为“打印机”的端口(LPT1),并选择属性。选择属性对话框的资源选项卡,并检查I/O范围,“设置”列的第一个值是实际的端口地址。对于LPT1,在大多数标准设置中,这应该是0378(这里是十六进位制,需要修改成十进位制,可使用函数hex2dec())。
现在,您可以用lptwrite(portAddress, byteValue)函数输出。例如,将并行端口的输出位0-7(针脚2-9)lptwrite(888, 255)。为了实现TTL触发器,在将端口重置为零之前,等待您的EEG系统需要的时间(通常最小1 /采样率),例如
lptwrite(888,255);
WaitSecs(0.004);
lptwrite(888,0);
2.2 第二种方式,适用于window 7/10 32&64位系统(Inpout文件)常见方式
取而代之的PortTalk的Inpout可用于制作寄存器访问可能的驱动程序。Inpout也适用于32位Windows,但与lptwrite不兼容。具体方法可参考:http://apps.usd.edu/coglab/psyc770/IO64.html
2.3 第三种方式,适用于window7系统,但对matlab版本有要求(6.5版本以上的matlab无法使用)
直接调用并口的针脚,Matlab的数据采集工具箱知道如何从包含BIOS数据的Windows内存保护区自动读取端口地址:
get(digitalio(' parallel '),' PortAddress ')
数据采集工具箱的误差(〜1ms)比lptwrite/lptread(〜10us)慢,并且无法寻址。
三、python中打标记方式
3.1第一种方法:调用库PyParallel
1、必须安装giveio文件,在win10上不可用。
2、####Event trigger routine开端口代码
import parallel, time
P = parallel.Parallel()
def SendCode(code):
P.setData(code) # send theevent code (could be 1-255)
time.sleep(0.006) # wait for 6 ms for Recorder to receive the code
P.setData(0) # send a codeto clear the register
time.sleep(0.01) # wait for10 ms
3、使用SendCode()发送事件代码标志,放在刺激之前。(可参考示例文件)
3.2第二种方法:使用Inpout32.dll文件
1、网络下载 inpout.dll 并把它放到电脑C:window/system32 文件夹中。 接下来就是使用 SendCode() 函数调用,在刺激前添加即可
2、####Event trigger routine ####开端口代码
import time
from ctypes import windll
P = windll.inpout32
def SendCode(code):
P.Out32(0x378, code) # sendthe event code (could be 1-255)
time.sleep(0.006) # wait for 6 ms for Recorderto receive the code
P.Out32(0x378, 0) # send acode to clear the register
time.sleep(0.01) # wait for10 ms
***关于Inpout函数使用问题,推荐网址:http://forums.highrez.co.uk/viewforum.php?f=7&sid=92c22a2901999bb1498445bf8a74d56c***
关于E-prime软件呈现刺激的问题,今天就写到这了,后面我会再慢慢总结推送一些关于脑电ERP及近红外NIRS使用的常见问题,但我觉得更多的应该是 个人的尝试,只有尝试了,才会知道问题的出现。祝好~
——2018.7.16 南京
以上部分内容参考网络资源。文章仅限学习使用,不用于商业行为,若有侵权及疑问,请后台留言!
Make brain technology more simple!
推荐阅读:
E-prime软件基本操作
E-prime软件视频操作指导(1)
近红外脑功能成像实验设计
如有疑问及建议,可联系邮箱science52brain@outlook.com